package com.mazegame.frontend;

import javafx.application.Platform;
import javafx.embed.swing.JFXPanel;
import javafx.scene.Scene;
import javafx.scene.media.Media;
import javafx.scene.media.MediaPlayer;
import javafx.scene.media.MediaView;

import javax.swing.*;
import java.awt.*;

public class StartPanel extends JPanel implements GamePanel {
    private CardLayout cardLayout;
    private JPanel cardPanel;
    private JFXPanel jfxPanel;
    private MediaPlayer mediaPlayer;
    private JLayeredPane layeredPane;
    private static final int WIDTH = 1500;
    private static final int HEIGHT = 900;

    public StartPanel(CardLayout cardLayout, JPanel cardPanel) {
        this.cardLayout = cardLayout;
        this.cardPanel = cardPanel;
        setLayout(new BorderLayout());
        initializeUI();
    }

    private void initializeUI() {
        layeredPane = new JLayeredPane();// 面板容器。是 Java Swing 提供的一个容器类，专门用于管理具有 Z 轴层级关系 的组件；是 Java Swing 中用于创建一个分层面板的语句，允许你在同一个区域内以“层次”的方式叠加多个组件（如面板、按钮等）。
        add(layeredPane, BorderLayout.CENTER);// 将 layeredPane（面板容器） 添加到面板的 BorderLayout.CENTER 区域

        jfxPanel = new JFXPanel();// 创建一个 JavaFX 容器，用于显示视频。JFXPanel 是 JavaFX 提供的一个 Swing 组件（继承自 JPanel），用于在 Swing 界面中嵌入 JavaFX 的内容
        jfxPanel.setBounds(0, 0, WIDTH, HEIGHT);// 设置 jfxPanel 的大小
        layeredPane.add(jfxPanel, JLayeredPane.DEFAULT_LAYER);// 将 jfxPanel 添加到 layeredPane 的 DEFAULT_LAYER 层(最底层)

        Platform.runLater(() -> initializeVideo());// 在 JavaFX 线程中执行初始化视频的操作

        JPanel overlayPanel = createOverlayPanel();// 创建一个覆盖层面板
        overlayPanel.setBounds(0, 0, WIDTH, HEIGHT);// 设置 overlayPanel 的大小
        layeredPane.add(overlayPanel, JLayeredPane.PALETTE_LAYER);// 将 overlayPanel 添加到 layeredPane 的 PALETTE_LAYER 层(中间层)
    }

    private void initializeVideo() {
        try {
            // 使用类加载器加载视频资源
            String videoPath = "/videos/start.mp4";
            java.net.URL resource = getClass().getResource(videoPath);
            if (resource == null) {
                JOptionPane.showMessageDialog(this, "视频文件不存在: " + videoPath, "错误", JOptionPane.ERROR_MESSAGE);
                return;
            }
            Media media = new Media(resource.toString());
            mediaPlayer = new MediaPlayer(media);
            mediaPlayer.setCycleCount(MediaPlayer.INDEFINITE);
            MediaView mediaView = new MediaView(mediaPlayer);
            mediaView.setFitWidth(WIDTH);
            mediaView.setFitHeight(HEIGHT);
            mediaView.setPreserveRatio(false);
            Scene scene = new Scene(new javafx.scene.Group(mediaView), WIDTH, HEIGHT);
            jfxPanel.setScene(scene);
            mediaPlayer.play();
            System.out.println("视频开始播放");
        } catch (Exception e) {
            e.printStackTrace();
            JOptionPane.showMessageDialog(this, "视频播放失败:\n" + e.getMessage(), "错误", JOptionPane.ERROR_MESSAGE);
        }
    }

    private JPanel createOverlayPanel() {
        JPanel overlayPanel = new JPanel();
        overlayPanel.setLayout(null); // 关闭布局管理器
        overlayPanel.setOpaque(false); // 父容器也要透明
        JButton startButton = new JButton();
        startButton.setBounds(1000, 660, 240,90 ); // 设置具体位置
        startButton.setFont(new Font("楷体", Font.PLAIN, 50));
        startButton.setContentAreaFilled(false); // 可选：让内容区透明
        startButton.setBorderPainted(false);
        startButton.addActionListener(e -> {
            cardLayout.show(cardPanel, "LOGINPANEL");
            if (mediaPlayer != null) {
                mediaPlayer.stop();
            }
        });
        overlayPanel.add(startButton);
        return overlayPanel;
    }

    @Override
    public void showPanel() {
        cardLayout.show(cardPanel, "STARTPANEL");
    }

    @Override
    public void cleanup() {
        if (mediaPlayer != null) {
            mediaPlayer.stop();
            mediaPlayer.dispose();
        }
    }
}